{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "介绍如何在pytorch环境下，使用JSMA算法攻击基于ImageNet数据集预训练的alexnet模型。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Jupyter notebook中使用Anaconda中的环境需要单独配置，默认情况下使用的是系统默认的Python环境，以使用advbox环境为例。\n",
    "首先在默认系统环境下执行以下命令，安装ipykernel。\n",
    "\n",
    "    conda install ipykernel\n",
    "    conda install -n advbox ipykernel\n",
    "\n",
    "在advbox环境下激活，这样启动后就可以在界面上看到advbox了。\n",
    "\n",
    "    python -m ipykernel install --user --name advbox --display-name advbox \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#打开调试日志\n",
    "import logging\n",
    "logging.basicConfig(level=logging.INFO,format=\"%(filename)s[line:%(lineno)d] %(levelname)s %(message)s\")\n",
    "logger=logging.getLogger(__name__)\n",
    "\n",
    "import torch\n",
    "import torchvision\n",
    "from torchvision import datasets, transforms\n",
    "from torch.autograd import Variable\n",
    "import torch.utils.data.dataloader as Data\n",
    "import torch.nn as nn\n",
    "from torchvision import models\n",
    "from adversarialbox.adversary import Adversary\n",
    "from adversarialbox.attacks.saliency import JSMA\n",
    "from adversarialbox.models.pytorch import PytorchModel\n",
    "import numpy as np\n",
    "import cv2\n",
    "from tools import show_images_diff"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#定义被攻击的图片\n",
    "image_path=\"tutorials/cropped_panda.jpg\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "<ipython-input-3-009d082b2646>[line:2] INFO CUDA Available: False\n",
      "pytorch.py[line:66] INFO Finish PytorchModel init\n",
      "base.py[line:87] INFO adversary:\n",
      "         original_label: 388\n",
      "         target_label: 538\n",
      "         is_targeted_attack: True\n",
      "saliency.py[line:87] INFO step = 0, original_label = 388, adv_label=388 logit=-3.97655725479\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "cpu\n",
      "(1, 3, 224, 224)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "saliency.py[line:87] INFO step = 1, original_label = 388, adv_label=388 logit=-3.96179437637\n",
      "saliency.py[line:87] INFO step = 2, original_label = 388, adv_label=388 logit=-3.9705016613\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.00308132172 is over\n",
      "saliency.py[line:87] INFO step = 3, original_label = 388, adv_label=388 logit=-3.99984383583\n",
      "saliency.py[line:87] INFO step = 4, original_label = 388, adv_label=388 logit=-3.96096515656\n",
      "saliency.py[line:87] INFO step = 5, original_label = 388, adv_label=388 logit=-3.94387102127\n",
      "saliency.py[line:87] INFO step = 6, original_label = 388, adv_label=388 logit=-3.91530132294\n",
      "saliency.py[line:87] INFO step = 7, original_label = 388, adv_label=388 logit=-3.88175773621\n",
      "saliency.py[line:87] INFO step = 8, original_label = 388, adv_label=388 logit=-3.90859127045\n",
      "saliency.py[line:87] INFO step = 9, original_label = 388, adv_label=388 logit=-3.83491182327\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.05028009415 is over\n",
      "saliency.py[line:87] INFO step = 10, original_label = 388, adv_label=388 logit=-3.79754829407\n",
      "saliency.py[line:87] INFO step = 11, original_label = 388, adv_label=388 logit=-3.74977064133\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.24594569206 is over\n",
      "saliency.py[line:87] INFO step = 12, original_label = 388, adv_label=388 logit=-3.8116607666\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.14319729805 is over\n",
      "saliency.py[line:87] INFO step = 13, original_label = 388, adv_label=388 logit=-3.84249186516\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.12607240677 is over\n",
      "saliency.py[line:87] INFO step = 14, original_label = 388, adv_label=388 logit=-3.87693548203\n",
      "saliency.py[line:87] INFO step = 15, original_label = 388, adv_label=388 logit=-3.83225536346\n",
      "saliency.py[line:87] INFO step = 16, original_label = 388, adv_label=388 logit=-3.78279590607\n",
      "saliency.py[line:87] INFO step = 17, original_label = 388, adv_label=388 logit=-3.76791095734\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.00308132172 is over\n",
      "saliency.py[line:87] INFO step = 18, original_label = 388, adv_label=388 logit=-3.74231386185\n",
      "saliency.py[line:87] INFO step = 19, original_label = 388, adv_label=388 logit=-3.74259662628\n",
      "saliency.py[line:87] INFO step = 20, original_label = 388, adv_label=388 logit=-3.7061727047\n",
      "saliency.py[line:87] INFO step = 21, original_label = 388, adv_label=388 logit=-3.64134573936\n",
      "saliency.py[line:87] INFO step = 22, original_label = 388, adv_label=388 logit=-3.61365747452\n",
      "saliency.py[line:87] INFO step = 23, original_label = 388, adv_label=388 logit=-3.59504413605\n",
      "saliency.py[line:87] INFO step = 24, original_label = 388, adv_label=388 logit=-3.57028675079\n",
      "saliency.py[line:87] INFO step = 25, original_label = 388, adv_label=388 logit=-3.62126612663\n",
      "saliency.py[line:87] INFO step = 26, original_label = 388, adv_label=388 logit=-3.58065748215\n",
      "saliency.py[line:87] INFO step = 27, original_label = 388, adv_label=388 logit=-3.51616954803\n",
      "saliency.py[line:87] INFO step = 28, original_label = 388, adv_label=388 logit=-3.47708725929\n",
      "saliency.py[line:87] INFO step = 29, original_label = 388, adv_label=388 logit=-3.42636871338\n",
      "saliency.py[line:87] INFO step = 30, original_label = 388, adv_label=388 logit=-3.40148258209\n",
      "saliency.py[line:87] INFO step = 31, original_label = 388, adv_label=388 logit=-3.37401580811\n",
      "saliency.py[line:87] INFO step = 32, original_label = 388, adv_label=388 logit=-3.33369970322\n",
      "saliency.py[line:87] INFO step = 33, original_label = 388, adv_label=388 logit=-3.28087472916\n",
      "saliency.py[line:87] INFO step = 34, original_label = 388, adv_label=388 logit=-3.20816898346\n",
      "saliency.py[line:87] INFO step = 35, original_label = 388, adv_label=388 logit=-3.1007540226\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.77681326866 is over\n",
      "saliency.py[line:87] INFO step = 36, original_label = 388, adv_label=388 logit=-3.05317592621\n",
      "saliency.py[line:87] INFO step = 37, original_label = 388, adv_label=388 logit=-3.02070403099\n",
      "saliency.py[line:87] INFO step = 38, original_label = 388, adv_label=388 logit=-2.99010038376\n",
      "saliency.py[line:87] INFO step = 39, original_label = 388, adv_label=388 logit=-2.94906330109\n",
      "saliency.py[line:87] INFO step = 40, original_label = 388, adv_label=388 logit=-2.89997053146\n",
      "saliency.py[line:87] INFO step = 41, original_label = 388, adv_label=388 logit=-2.86715507507\n",
      "saliency.py[line:87] INFO step = 42, original_label = 388, adv_label=388 logit=-2.8989739418\n",
      "saliency.py[line:87] INFO step = 43, original_label = 388, adv_label=388 logit=-2.8521873951\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.30535984039 is over\n",
      "saliency.py[line:87] INFO step = 44, original_label = 388, adv_label=388 logit=-2.83762311935\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.15532207489 is over\n",
      "saliency.py[line:87] INFO step = 45, original_label = 388, adv_label=388 logit=-2.8178653717\n",
      "saliency.py[line:87] INFO step = 46, original_label = 388, adv_label=388 logit=-2.89335584641\n",
      "saliency.py[line:87] INFO step = 47, original_label = 388, adv_label=388 logit=-2.8373041153\n",
      "saliency.py[line:87] INFO step = 48, original_label = 388, adv_label=388 logit=-2.79999494553\n",
      "saliency.py[line:87] INFO step = 49, original_label = 388, adv_label=388 logit=-2.80549311638\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.62562084198 is over\n",
      "saliency.py[line:87] INFO step = 50, original_label = 388, adv_label=388 logit=-2.78850841522\n",
      "saliency.py[line:87] INFO step = 51, original_label = 388, adv_label=388 logit=-2.81043481827\n",
      "saliency.py[line:87] INFO step = 52, original_label = 388, adv_label=388 logit=-2.78860855103\n",
      "saliency.py[line:87] INFO step = 53, original_label = 388, adv_label=388 logit=-2.76762580872\n",
      "saliency.py[line:87] INFO step = 54, original_label = 388, adv_label=388 logit=-2.72009086609\n",
      "saliency.py[line:87] INFO step = 55, original_label = 388, adv_label=388 logit=-2.71430826187\n",
      "saliency.py[line:87] INFO step = 56, original_label = 388, adv_label=388 logit=-2.62851428986\n",
      "saliency.py[line:87] INFO step = 57, original_label = 388, adv_label=388 logit=-2.5801756382\n",
      "saliency.py[line:87] INFO step = 58, original_label = 388, adv_label=388 logit=-2.5367770195\n",
      "saliency.py[line:87] INFO step = 59, original_label = 388, adv_label=388 logit=-2.51962971687\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.74256372452 is over\n",
      "saliency.py[line:87] INFO step = 60, original_label = 388, adv_label=388 logit=-2.50626397133\n",
      "saliency.py[line:87] INFO step = 61, original_label = 388, adv_label=388 logit=-2.45792388916\n",
      "saliency.py[line:87] INFO step = 62, original_label = 388, adv_label=388 logit=-2.41444444656\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.57436966896 is over\n",
      "saliency.py[line:87] INFO step = 63, original_label = 388, adv_label=388 logit=-2.39078187943\n",
      "saliency.py[line:87] INFO step = 64, original_label = 388, adv_label=388 logit=-2.33518981934\n",
      "saliency.py[line:87] INFO step = 65, original_label = 388, adv_label=388 logit=-2.25175023079\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.09182286263 is over\n",
      "saliency.py[line:87] INFO step = 66, original_label = 388, adv_label=388 logit=-2.19114875793\n",
      "saliency.py[line:87] INFO step = 67, original_label = 388, adv_label=388 logit=-2.07767224312\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.64171600342 is over\n",
      "saliency.py[line:87] INFO step = 68, original_label = 388, adv_label=388 logit=-2.02856254578\n",
      "saliency.py[line:87] INFO step = 69, original_label = 388, adv_label=388 logit=-2.03711676598\n",
      "saliency.py[line:87] INFO step = 70, original_label = 388, adv_label=388 logit=-2.01501321793\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.13833379745 is over\n",
      "saliency.py[line:87] INFO step = 71, original_label = 388, adv_label=388 logit=-2.01814484596\n",
      "saliency.py[line:87] INFO step = 72, original_label = 388, adv_label=388 logit=-1.9750431776\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.23067235947 is over\n",
      "saliency.py[line:87] INFO step = 73, original_label = 388, adv_label=388 logit=-1.91759395599\n",
      "saliency.py[line:87] INFO step = 74, original_label = 388, adv_label=388 logit=-1.90511274338\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.28319334984 is over\n",
      "saliency.py[line:87] INFO step = 75, original_label = 388, adv_label=388 logit=-1.87959074974\n",
      "saliency.py[line:87] INFO step = 76, original_label = 388, adv_label=388 logit=-1.83319365978\n",
      "saliency.py[line:87] INFO step = 77, original_label = 388, adv_label=388 logit=-1.80253577232\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "saliency.py[line:87] INFO step = 78, original_label = 388, adv_label=388 logit=-1.80938887596\n",
      "saliency.py[line:87] INFO step = 79, original_label = 388, adv_label=388 logit=-1.78918254375\n",
      "saliency.py[line:87] INFO step = 80, original_label = 388, adv_label=388 logit=-1.77211487293\n",
      "saliency.py[line:87] INFO step = 81, original_label = 388, adv_label=388 logit=-1.73850846291\n",
      "saliency.py[line:87] INFO step = 82, original_label = 388, adv_label=388 logit=-1.67633092403\n",
      "saliency.py[line:87] INFO step = 83, original_label = 388, adv_label=388 logit=-1.66609013081\n",
      "saliency.py[line:87] INFO step = 84, original_label = 388, adv_label=388 logit=-1.61802899837\n",
      "saliency.py[line:87] INFO step = 85, original_label = 388, adv_label=388 logit=-1.59684574604\n",
      "saliency.py[line:87] INFO step = 86, original_label = 388, adv_label=388 logit=-1.55499505997\n",
      "saliency.py[line:87] INFO step = 87, original_label = 388, adv_label=388 logit=-1.53600263596\n",
      "saliency.py[line:87] INFO step = 88, original_label = 388, adv_label=388 logit=-1.52479326725\n",
      "saliency.py[line:87] INFO step = 89, original_label = 388, adv_label=388 logit=-1.50543916225\n",
      "saliency.py[line:87] INFO step = 90, original_label = 388, adv_label=153 logit=-1.47846066952\n",
      "saliency.py[line:87] INFO step = 91, original_label = 388, adv_label=153 logit=-1.47613930702\n",
      "saliency.py[line:87] INFO step = 92, original_label = 388, adv_label=153 logit=-1.4755487442\n",
      "saliency.py[line:87] INFO step = 93, original_label = 388, adv_label=153 logit=-1.44006621838\n",
      "saliency.py[line:87] INFO step = 94, original_label = 388, adv_label=153 logit=-1.42439925671\n",
      "saliency.py[line:87] INFO step = 95, original_label = 388, adv_label=153 logit=-1.3930927515\n",
      "saliency.py[line:87] INFO step = 96, original_label = 388, adv_label=153 logit=-1.37793028355\n",
      "saliency.py[line:87] INFO step = 97, original_label = 388, adv_label=153 logit=-1.35745167732\n",
      "saliency.py[line:87] INFO step = 98, original_label = 388, adv_label=153 logit=-1.37948930264\n",
      "saliency.py[line:87] INFO step = 99, original_label = 388, adv_label=153 logit=-1.36211705208\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.42002797127 is over\n",
      "saliency.py[line:87] INFO step = 100, original_label = 388, adv_label=153 logit=-1.3507694006\n",
      "saliency.py[line:87] INFO step = 101, original_label = 388, adv_label=153 logit=-1.35698199272\n",
      "saliency.py[line:87] INFO step = 102, original_label = 388, adv_label=153 logit=-1.32402312756\n",
      "saliency.py[line:87] INFO step = 103, original_label = 388, adv_label=153 logit=-1.30925619602\n",
      "saliency.py[line:87] INFO step = 104, original_label = 388, adv_label=153 logit=-1.27706634998\n",
      "saliency.py[line:87] INFO step = 105, original_label = 388, adv_label=153 logit=-1.28192210197\n",
      "saliency.py[line:87] INFO step = 106, original_label = 388, adv_label=153 logit=-1.2405333519\n",
      "saliency.py[line:87] INFO step = 107, original_label = 388, adv_label=153 logit=-1.21153783798\n",
      "saliency.py[line:87] INFO step = 108, original_label = 388, adv_label=153 logit=-1.17452406883\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.40993499756 is over\n",
      "saliency.py[line:87] INFO step = 109, original_label = 388, adv_label=153 logit=-1.16547477245\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.87198877335 is over\n",
      "saliency.py[line:87] INFO step = 110, original_label = 388, adv_label=153 logit=-1.16377604008\n",
      "saliency.py[line:87] INFO step = 111, original_label = 388, adv_label=153 logit=-1.13965761662\n",
      "saliency.py[line:87] INFO step = 112, original_label = 388, adv_label=153 logit=-1.12581431866\n",
      "saliency.py[line:87] INFO step = 113, original_label = 388, adv_label=153 logit=-1.07978129387\n",
      "saliency.py[line:87] INFO step = 114, original_label = 388, adv_label=153 logit=-1.04479038715\n",
      "saliency.py[line:87] INFO step = 115, original_label = 388, adv_label=153 logit=-1.01487743855\n",
      "saliency.py[line:87] INFO step = 116, original_label = 388, adv_label=153 logit=-0.996977090836\n",
      "saliency.py[line:87] INFO step = 117, original_label = 388, adv_label=153 logit=-0.977490484715\n",
      "saliency.py[line:87] INFO step = 118, original_label = 388, adv_label=153 logit=-0.944638907909\n",
      "saliency.py[line:87] INFO step = 119, original_label = 388, adv_label=153 logit=-0.911066710949\n",
      "saliency.py[line:87] INFO step = 120, original_label = 388, adv_label=153 logit=-0.859697520733\n",
      "saliency.py[line:87] INFO step = 121, original_label = 388, adv_label=153 logit=-0.846122443676\n",
      "saliency.py[line:87] INFO step = 122, original_label = 388, adv_label=153 logit=-0.851821482182\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.18970823288 is over\n",
      "saliency.py[line:87] INFO step = 123, original_label = 388, adv_label=153 logit=-0.851444602013\n",
      "saliency.py[line:87] INFO step = 124, original_label = 388, adv_label=153 logit=-0.853296518326\n",
      "saliency.py[line:87] INFO step = 125, original_label = 388, adv_label=153 logit=-0.869807124138\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.2944662571 is over\n",
      "saliency.py[line:87] INFO step = 126, original_label = 388, adv_label=153 logit=-0.838368833065\n",
      "saliency.py[line:87] INFO step = 127, original_label = 388, adv_label=153 logit=-0.81340521574\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.26036453247 is over\n",
      "saliency.py[line:87] INFO step = 128, original_label = 388, adv_label=153 logit=-0.805541872978\n",
      "saliency.py[line:87] INFO step = 129, original_label = 388, adv_label=153 logit=-0.773967206478\n",
      "saliency.py[line:87] INFO step = 130, original_label = 388, adv_label=153 logit=-0.769508779049\n",
      "saliency.py[line:87] INFO step = 131, original_label = 388, adv_label=153 logit=-0.793222844601\n",
      "saliency.py[line:87] INFO step = 132, original_label = 388, adv_label=153 logit=-0.786155760288\n",
      "saliency.py[line:87] INFO step = 133, original_label = 388, adv_label=153 logit=-0.773590624332\n",
      "saliency.py[line:87] INFO step = 134, original_label = 388, adv_label=153 logit=-0.777943611145\n",
      "saliency.py[line:87] INFO step = 135, original_label = 388, adv_label=153 logit=-0.733869969845\n",
      "saliency.py[line:87] INFO step = 136, original_label = 388, adv_label=153 logit=-0.701593220234\n",
      "saliency.py[line:87] INFO step = 137, original_label = 388, adv_label=153 logit=-0.693048238754\n",
      "saliency.py[line:87] INFO step = 138, original_label = 388, adv_label=153 logit=-0.695098817348\n",
      "saliency.py[line:87] INFO step = 139, original_label = 388, adv_label=153 logit=-0.670977890491\n",
      "saliency.py[line:87] INFO step = 140, original_label = 388, adv_label=153 logit=-0.628910005093\n",
      "saliency.py[line:87] INFO step = 141, original_label = 388, adv_label=153 logit=-0.598797380924\n",
      "saliency.py[line:87] INFO step = 142, original_label = 388, adv_label=153 logit=-0.5913875103\n",
      "saliency.py[line:87] INFO step = 143, original_label = 388, adv_label=153 logit=-0.558668971062\n",
      "saliency.py[line:87] INFO step = 144, original_label = 388, adv_label=153 logit=-0.528902888298\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.38501405716 is over\n",
      "saliency.py[line:87] INFO step = 145, original_label = 388, adv_label=153 logit=-0.515644490719\n",
      "saliency.py[line:87] INFO step = 146, original_label = 388, adv_label=153 logit=-0.49632370472\n",
      "saliency.py[line:87] INFO step = 147, original_label = 388, adv_label=153 logit=-0.489606261253\n",
      "saliency.py[line:87] INFO step = 148, original_label = 388, adv_label=153 logit=-0.472030460835\n",
      "saliency.py[line:87] INFO step = 149, original_label = 388, adv_label=153 logit=-0.446472406387\n",
      "saliency.py[line:87] INFO step = 150, original_label = 388, adv_label=153 logit=-0.452949225903\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.03854799271 is over\n",
      "saliency.py[line:87] INFO step = 151, original_label = 388, adv_label=153 logit=-0.429124593735\n",
      "saliency.py[line:87] INFO step = 152, original_label = 388, adv_label=153 logit=-0.398632705212\n",
      "saliency.py[line:87] INFO step = 153, original_label = 388, adv_label=153 logit=-0.406129896641\n",
      "saliency.py[line:87] INFO step = 154, original_label = 388, adv_label=153 logit=-0.401069581509\n",
      "saliency.py[line:87] INFO step = 155, original_label = 388, adv_label=153 logit=-0.387224972248\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.17554593086 is over\n",
      "saliency.py[line:87] INFO step = 156, original_label = 388, adv_label=153 logit=-0.372148454189\n",
      "saliency.py[line:87] INFO step = 157, original_label = 388, adv_label=153 logit=-0.366447031498\n",
      "saliency.py[line:87] INFO step = 158, original_label = 388, adv_label=153 logit=-0.364737570286\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "saliency.py[line:87] INFO step = 159, original_label = 388, adv_label=153 logit=-0.358267903328\n",
      "saliency.py[line:87] INFO step = 160, original_label = 388, adv_label=153 logit=-0.378948569298\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.27465009689 is over\n",
      "saliency.py[line:87] INFO step = 161, original_label = 388, adv_label=153 logit=-0.371035516262\n",
      "saliency.py[line:87] INFO step = 162, original_label = 388, adv_label=153 logit=-0.343400776386\n",
      "saliency.py[line:87] INFO step = 163, original_label = 388, adv_label=153 logit=-0.322207987309\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.65884065628 is over\n",
      "saliency.py[line:87] INFO step = 164, original_label = 388, adv_label=153 logit=-0.305791676044\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.05567264557 is over\n",
      "saliency.py[line:87] INFO step = 165, original_label = 388, adv_label=153 logit=-0.277698040009\n",
      "saliency.py[line:87] INFO step = 166, original_label = 388, adv_label=153 logit=-0.337258815765\n",
      "saliency.py[line:87] INFO step = 167, original_label = 388, adv_label=153 logit=-0.327059328556\n",
      "saliency.py[line:87] INFO step = 168, original_label = 388, adv_label=153 logit=-0.291919529438\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.77004909515 is over\n",
      "saliency.py[line:87] INFO step = 169, original_label = 388, adv_label=153 logit=-0.290815234184\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.05567264557 is over\n",
      "saliency.py[line:87] INFO step = 170, original_label = 388, adv_label=153 logit=-0.242800191045\n",
      "saliency.py[line:87] INFO step = 171, original_label = 388, adv_label=153 logit=-0.205704674125\n",
      "saliency.py[line:87] INFO step = 172, original_label = 388, adv_label=153 logit=-0.220584854484\n",
      "saliency.py[line:87] INFO step = 173, original_label = 388, adv_label=153 logit=-0.234406366944\n",
      "saliency.py[line:87] INFO step = 174, original_label = 388, adv_label=153 logit=-0.214486822486\n",
      "saliency.py[line:87] INFO step = 175, original_label = 388, adv_label=153 logit=-0.181735530496\n",
      "saliency.py[line:87] INFO step = 176, original_label = 388, adv_label=153 logit=-0.182740584016\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.03809523582 is over\n",
      "saliency.py[line:87] INFO step = 177, original_label = 388, adv_label=153 logit=-0.163889691234\n",
      "saliency.py[line:87] INFO step = 178, original_label = 388, adv_label=153 logit=-0.0979894846678\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.36540651321 is over\n",
      "saliency.py[line:87] INFO step = 179, original_label = 388, adv_label=153 logit=-0.0774544626474\n",
      "saliency.py[line:87] INFO step = 180, original_label = 388, adv_label=153 logit=-0.0746129900217\n",
      "saliency.py[line:87] INFO step = 181, original_label = 388, adv_label=153 logit=-0.0958401411772\n",
      "saliency.py[line:87] INFO step = 182, original_label = 388, adv_label=153 logit=-0.0956284850836\n",
      "saliency.py[line:87] INFO step = 183, original_label = 388, adv_label=153 logit=-0.0725474208593\n",
      "saliency.py[line:87] INFO step = 184, original_label = 388, adv_label=153 logit=-0.062016800046\n",
      "saliency.py[line:87] INFO step = 185, original_label = 388, adv_label=153 logit=-0.0163076370955\n",
      "saliency.py[line:87] INFO step = 186, original_label = 388, adv_label=153 logit=0.013704970479\n",
      "saliency.py[line:87] INFO step = 187, original_label = 388, adv_label=153 logit=0.0348751991987\n",
      "saliency.py[line:87] INFO step = 188, original_label = 388, adv_label=153 logit=0.0347963422537\n",
      "saliency.py[line:87] INFO step = 189, original_label = 388, adv_label=153 logit=0.0351423174143\n",
      "saliency.py[line:87] INFO step = 190, original_label = 388, adv_label=153 logit=0.104893043637\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.19033622742 is over\n",
      "saliency.py[line:87] INFO step = 191, original_label = 388, adv_label=153 logit=0.124729961157\n",
      "saliency.py[line:87] INFO step = 192, original_label = 388, adv_label=153 logit=0.129801869392\n",
      "saliency.py[line:87] INFO step = 193, original_label = 388, adv_label=153 logit=0.138701334596\n",
      "saliency.py[line:87] INFO step = 194, original_label = 388, adv_label=153 logit=0.163837864995\n",
      "saliency.py[line:87] INFO step = 195, original_label = 388, adv_label=153 logit=0.177574649453\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.72543907166 is over\n",
      "saliency.py[line:87] INFO step = 196, original_label = 388, adv_label=153 logit=0.208796992898\n",
      "saliency.py[line:87] INFO step = 197, original_label = 388, adv_label=153 logit=0.188473895192\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.17554593086 is over\n",
      "saliency.py[line:87] INFO step = 198, original_label = 388, adv_label=153 logit=0.201123848557\n",
      "saliency.py[line:87] INFO step = 199, original_label = 388, adv_label=153 logit=0.229832544923\n",
      "saliency.py[line:87] INFO step = 200, original_label = 388, adv_label=153 logit=0.242080762982\n",
      "saliency.py[line:87] INFO step = 201, original_label = 388, adv_label=153 logit=0.278751015663\n",
      "saliency.py[line:87] INFO step = 202, original_label = 388, adv_label=153 logit=0.269546329975\n",
      "saliency.py[line:87] INFO step = 203, original_label = 388, adv_label=153 logit=0.263766825199\n",
      "saliency.py[line:87] INFO step = 204, original_label = 388, adv_label=153 logit=0.287134885788\n",
      "saliency.py[line:87] INFO step = 205, original_label = 388, adv_label=153 logit=0.286104142666\n",
      "saliency.py[line:87] INFO step = 206, original_label = 388, adv_label=153 logit=0.309475541115\n",
      "saliency.py[line:87] INFO step = 207, original_label = 388, adv_label=153 logit=0.337762534618\n",
      "saliency.py[line:87] INFO step = 208, original_label = 388, adv_label=153 logit=0.359325408936\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.07279729843 is over\n",
      "saliency.py[line:87] INFO step = 209, original_label = 388, adv_label=153 logit=0.371536850929\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.05560231209 is over\n",
      "saliency.py[line:87] INFO step = 210, original_label = 388, adv_label=153 logit=0.392188727856\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.00308132172 is over\n",
      "saliency.py[line:87] INFO step = 211, original_label = 388, adv_label=153 logit=0.399086773396\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.56679773331 is over\n",
      "saliency.py[line:87] INFO step = 212, original_label = 388, adv_label=153 logit=0.400628507137\n",
      "saliency.py[line:87] INFO step = 213, original_label = 388, adv_label=153 logit=0.404074788094\n",
      "saliency.py[line:87] INFO step = 214, original_label = 388, adv_label=153 logit=0.417655646801\n",
      "saliency.py[line:87] INFO step = 215, original_label = 388, adv_label=153 logit=0.435826539993\n",
      "saliency.py[line:87] INFO step = 216, original_label = 388, adv_label=153 logit=0.465741574764\n",
      "saliency.py[line:87] INFO step = 217, original_label = 388, adv_label=153 logit=0.476319253445\n",
      "saliency.py[line:87] INFO step = 218, original_label = 388, adv_label=153 logit=0.500146448612\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.78557443619 is over\n",
      "saliency.py[line:87] INFO step = 219, original_label = 388, adv_label=153 logit=0.500733554363\n",
      "saliency.py[line:87] INFO step = 220, original_label = 388, adv_label=153 logit=0.513073086739\n",
      "saliency.py[line:87] INFO step = 221, original_label = 388, adv_label=153 logit=0.53726541996\n",
      "saliency.py[line:87] INFO step = 222, original_label = 388, adv_label=153 logit=0.570957303047\n",
      "saliency.py[line:87] INFO step = 223, original_label = 388, adv_label=153 logit=0.599551916122\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.87956166267 is over\n",
      "saliency.py[line:87] INFO step = 224, original_label = 388, adv_label=153 logit=0.617588102818\n",
      "saliency.py[line:87] INFO step = 225, original_label = 388, adv_label=153 logit=0.685019671917\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.69803953171 is over\n",
      "saliency.py[line:87] INFO step = 226, original_label = 388, adv_label=153 logit=0.68902438879\n",
      "saliency.py[line:87] INFO step = 227, original_label = 388, adv_label=153 logit=0.735930383205\n",
      "saliency.py[line:87] INFO step = 228, original_label = 388, adv_label=153 logit=0.784022152424\n",
      "saliency.py[line:87] INFO step = 229, original_label = 388, adv_label=153 logit=0.8067035079\n",
      "saliency.py[line:87] INFO step = 230, original_label = 388, adv_label=153 logit=0.846915185452\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.08992218971 is over\n",
      "saliency.py[line:87] INFO step = 231, original_label = 388, adv_label=153 logit=0.907701075077\n",
      "saliency.py[line:87] INFO step = 232, original_label = 388, adv_label=153 logit=0.957988083363\n",
      "saliency.py[line:87] INFO step = 233, original_label = 388, adv_label=153 logit=0.989199697971\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "saliency.py[line:87] INFO step = 234, original_label = 388, adv_label=153 logit=1.02352142334\n",
      "saliency.py[line:87] INFO step = 235, original_label = 388, adv_label=153 logit=1.04485571384\n",
      "saliency.py[line:87] INFO step = 236, original_label = 388, adv_label=153 logit=1.07976198196\n",
      "saliency.py[line:87] INFO step = 237, original_label = 388, adv_label=153 logit=1.10686004162\n",
      "saliency.py[line:87] INFO step = 238, original_label = 388, adv_label=153 logit=1.1598585844\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.52296924591 is over\n",
      "saliency.py[line:87] INFO step = 239, original_label = 388, adv_label=153 logit=1.16542422771\n",
      "saliency.py[line:87] INFO step = 240, original_label = 388, adv_label=153 logit=1.17010235786\n",
      "saliency.py[line:87] INFO step = 241, original_label = 388, adv_label=153 logit=1.2002414465\n",
      "saliency.py[line:87] INFO step = 242, original_label = 388, adv_label=153 logit=1.22429013252\n",
      "saliency.py[line:87] INFO step = 243, original_label = 388, adv_label=153 logit=1.26407968998\n",
      "saliency.py[line:87] INFO step = 244, original_label = 388, adv_label=153 logit=1.31237983704\n",
      "saliency.py[line:87] INFO step = 245, original_label = 388, adv_label=153 logit=1.34538984299\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.65884065628 is over\n",
      "saliency.py[line:87] INFO step = 246, original_label = 388, adv_label=153 logit=1.36727285385\n",
      "saliency.py[line:87] INFO step = 247, original_label = 388, adv_label=153 logit=1.33869767189\n",
      "saliency.py[line:87] INFO step = 248, original_label = 388, adv_label=153 logit=1.34853601456\n",
      "saliency.py[line:87] INFO step = 249, original_label = 388, adv_label=153 logit=1.36248278618\n",
      "saliency.py[line:87] INFO step = 250, original_label = 388, adv_label=153 logit=1.3411616087\n",
      "saliency.py[line:87] INFO step = 251, original_label = 388, adv_label=153 logit=1.37731230259\n",
      "saliency.py[line:87] INFO step = 252, original_label = 388, adv_label=153 logit=1.41436469555\n",
      "saliency.py[line:87] INFO step = 253, original_label = 388, adv_label=153 logit=1.45333755016\n",
      "saliency.py[line:87] INFO step = 254, original_label = 388, adv_label=153 logit=1.48136723042\n",
      "saliency.py[line:87] INFO step = 255, original_label = 388, adv_label=153 logit=1.46897494793\n",
      "saliency.py[line:87] INFO step = 256, original_label = 388, adv_label=153 logit=1.51395428181\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.52296924591 is over\n",
      "saliency.py[line:87] INFO step = 257, original_label = 388, adv_label=153 logit=1.52076900005\n",
      "saliency.py[line:87] INFO step = 258, original_label = 388, adv_label=153 logit=1.58314192295\n",
      "saliency.py[line:87] INFO step = 259, original_label = 388, adv_label=153 logit=1.59301126003\n",
      "saliency.py[line:87] INFO step = 260, original_label = 388, adv_label=153 logit=1.60899209976\n",
      "saliency.py[line:87] INFO step = 261, original_label = 388, adv_label=153 logit=1.61260068417\n",
      "saliency.py[line:87] INFO step = 262, original_label = 388, adv_label=153 logit=1.6506652832\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.9102241993 is over\n",
      "saliency.py[line:87] INFO step = 263, original_label = 388, adv_label=153 logit=1.67576527596\n",
      "saliency.py[line:87] INFO step = 264, original_label = 388, adv_label=153 logit=1.63060438633\n",
      "saliency.py[line:87] INFO step = 265, original_label = 388, adv_label=153 logit=1.71119606495\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.74256372452 is over\n",
      "saliency.py[line:87] INFO step = 266, original_label = 388, adv_label=153 logit=1.72540819645\n",
      "saliency.py[line:87] INFO step = 267, original_label = 388, adv_label=153 logit=1.75772094727\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.65017557144 is over\n",
      "saliency.py[line:87] INFO step = 268, original_label = 388, adv_label=153 logit=1.76319372654\n",
      "saliency.py[line:87] INFO step = 269, original_label = 388, adv_label=153 logit=1.76555359364\n",
      "saliency.py[line:87] INFO step = 270, original_label = 388, adv_label=153 logit=1.81894385815\n",
      "saliency.py[line:87] INFO step = 271, original_label = 388, adv_label=153 logit=1.85809350014\n",
      "saliency.py[line:87] INFO step = 272, original_label = 388, adv_label=153 logit=1.91748774052\n",
      "saliency.py[line:87] INFO step = 273, original_label = 388, adv_label=153 logit=1.97149336338\n",
      "saliency.py[line:87] INFO step = 274, original_label = 388, adv_label=153 logit=2.05064320564\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.78557443619 is over\n",
      "saliency.py[line:87] INFO step = 275, original_label = 388, adv_label=153 logit=2.05132722855\n",
      "saliency.py[line:87] INFO step = 276, original_label = 388, adv_label=153 logit=2.05517911911\n",
      "saliency.py[line:87] INFO step = 277, original_label = 388, adv_label=153 logit=2.02584457397\n",
      "saliency.py[line:87] INFO step = 278, original_label = 388, adv_label=153 logit=2.02486228943\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.12563037872 is over\n",
      "saliency.py[line:87] INFO step = 279, original_label = 388, adv_label=153 logit=2.06700515747\n",
      "saliency.py[line:87] INFO step = 280, original_label = 388, adv_label=153 logit=2.14324903488\n",
      "saliency.py[line:87] INFO step = 281, original_label = 388, adv_label=153 logit=2.20387554169\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.72543907166 is over\n",
      "saliency.py[line:87] INFO step = 282, original_label = 388, adv_label=153 logit=2.24410820007\n",
      "saliency.py[line:87] INFO step = 283, original_label = 388, adv_label=153 logit=2.29369235039\n",
      "saliency.py[line:87] INFO step = 284, original_label = 388, adv_label=153 logit=2.32979798317\n",
      "saliency.py[line:87] INFO step = 285, original_label = 388, adv_label=153 logit=2.3249707222\n",
      "saliency.py[line:87] INFO step = 286, original_label = 388, adv_label=153 logit=2.36950469017\n",
      "saliency.py[line:87] INFO step = 287, original_label = 388, adv_label=153 logit=2.44567728043\n",
      "saliency.py[line:87] INFO step = 288, original_label = 388, adv_label=153 logit=2.4860162735\n",
      "saliency.py[line:87] INFO step = 289, original_label = 388, adv_label=153 logit=2.53422403336\n",
      "saliency.py[line:87] INFO step = 290, original_label = 388, adv_label=153 logit=2.539914608\n",
      "saliency.py[line:87] INFO step = 291, original_label = 388, adv_label=153 logit=2.60859537125\n",
      "saliency.py[line:87] INFO step = 292, original_label = 388, adv_label=153 logit=2.69328856468\n",
      "saliency.py[line:87] INFO step = 293, original_label = 388, adv_label=153 logit=2.75617671013\n",
      "saliency.py[line:87] INFO step = 294, original_label = 388, adv_label=153 logit=2.75221824646\n",
      "saliency.py[line:87] INFO step = 295, original_label = 388, adv_label=153 logit=2.80344748497\n",
      "saliency.py[line:87] INFO step = 296, original_label = 388, adv_label=153 logit=2.77319693565\n",
      "saliency.py[line:87] INFO step = 297, original_label = 388, adv_label=153 logit=2.80133152008\n",
      "saliency.py[line:87] INFO step = 298, original_label = 388, adv_label=153 logit=2.79892158508\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.14313721657 is over\n",
      "saliency.py[line:87] INFO step = 299, original_label = 388, adv_label=153 logit=2.83409976959\n",
      "saliency.py[line:87] INFO step = 300, original_label = 388, adv_label=153 logit=2.86973500252\n",
      "saliency.py[line:87] INFO step = 301, original_label = 388, adv_label=153 logit=2.91166305542\n",
      "saliency.py[line:87] INFO step = 302, original_label = 388, adv_label=153 logit=2.88572597504\n",
      "saliency.py[line:87] INFO step = 303, original_label = 388, adv_label=153 logit=2.92128324509\n",
      "saliency.py[line:87] INFO step = 304, original_label = 388, adv_label=153 logit=2.99256324768\n",
      "saliency.py[line:87] INFO step = 305, original_label = 388, adv_label=153 logit=3.03750371933\n",
      "saliency.py[line:87] INFO step = 306, original_label = 388, adv_label=153 logit=3.07625818253\n",
      "saliency.py[line:87] INFO step = 307, original_label = 388, adv_label=153 logit=3.131742239\n",
      "saliency.py[line:87] INFO step = 308, original_label = 388, adv_label=712 logit=3.0983080864\n",
      "saliency.py[line:87] INFO step = 309, original_label = 388, adv_label=712 logit=3.0712647438\n",
      "saliency.py[line:87] INFO step = 310, original_label = 388, adv_label=712 logit=3.11189603806\n",
      "saliency.py[line:87] INFO step = 311, original_label = 388, adv_label=712 logit=3.11359906197\n",
      "saliency.py[line:87] INFO step = 312, original_label = 388, adv_label=712 logit=3.15441131592\n",
      "saliency.py[line:87] INFO step = 313, original_label = 388, adv_label=712 logit=3.17195177078\n",
      "saliency.py[line:87] INFO step = 314, original_label = 388, adv_label=712 logit=3.15628290176\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "saliency.py[line:87] INFO step = 315, original_label = 388, adv_label=712 logit=3.20123696327\n",
      "saliency.py[line:87] INFO step = 316, original_label = 388, adv_label=712 logit=3.20767140388\n",
      "saliency.py[line:87] INFO step = 317, original_label = 388, adv_label=712 logit=3.21089267731\n",
      "saliency.py[line:87] INFO step = 318, original_label = 388, adv_label=712 logit=3.24746847153\n",
      "saliency.py[line:87] INFO step = 319, original_label = 388, adv_label=712 logit=3.23471498489\n",
      "saliency.py[line:87] INFO step = 320, original_label = 388, adv_label=712 logit=3.30864787102\n",
      "saliency.py[line:87] INFO step = 321, original_label = 388, adv_label=153 logit=3.3368434906\n",
      "saliency.py[line:87] INFO step = 322, original_label = 388, adv_label=712 logit=3.32553744316\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.58422660828 is over\n",
      "saliency.py[line:87] INFO step = 323, original_label = 388, adv_label=712 logit=3.33337116241\n",
      "saliency.py[line:87] INFO step = 324, original_label = 388, adv_label=712 logit=3.37874984741\n",
      "saliency.py[line:87] INFO step = 325, original_label = 388, adv_label=712 logit=3.39644742012\n",
      "saliency.py[line:87] INFO step = 326, original_label = 388, adv_label=712 logit=3.41470646858\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.78557443619 is over\n",
      "saliency.py[line:87] INFO step = 327, original_label = 388, adv_label=712 logit=3.41501283646\n",
      "saliency.py[line:87] INFO step = 328, original_label = 388, adv_label=712 logit=3.47381973267\n",
      "saliency.py[line:87] INFO step = 329, original_label = 388, adv_label=712 logit=3.45680165291\n",
      "saliency.py[line:87] INFO step = 330, original_label = 388, adv_label=712 logit=3.46111559868\n",
      "saliency.py[line:87] INFO step = 331, original_label = 388, adv_label=712 logit=3.53964948654\n",
      "saliency.py[line:87] INFO step = 332, original_label = 388, adv_label=712 logit=3.57405328751\n",
      "saliency.py[line:87] INFO step = 333, original_label = 388, adv_label=712 logit=3.58700537682\n",
      "saliency.py[line:87] INFO step = 334, original_label = 388, adv_label=712 logit=3.6194922924\n",
      "saliency.py[line:87] INFO step = 335, original_label = 388, adv_label=712 logit=3.66210079193\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.0906162262 is over\n",
      "saliency.py[line:87] INFO step = 336, original_label = 388, adv_label=712 logit=3.70084834099\n",
      "saliency.py[line:87] INFO step = 337, original_label = 388, adv_label=153 logit=3.70649194717\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.26568627357 is over\n",
      "saliency.py[line:87] INFO step = 338, original_label = 388, adv_label=153 logit=3.76109242439\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.47965145111 is over\n",
      "saliency.py[line:87] INFO step = 339, original_label = 388, adv_label=153 logit=3.76959562302\n",
      "saliency.py[line:87] INFO step = 340, original_label = 388, adv_label=153 logit=3.79992628098\n",
      "saliency.py[line:87] INFO step = 341, original_label = 388, adv_label=712 logit=3.85507369041\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.16064429283 is over\n",
      "saliency.py[line:87] INFO step = 342, original_label = 388, adv_label=712 logit=3.88442635536\n",
      "saliency.py[line:87] INFO step = 343, original_label = 388, adv_label=712 logit=3.90897130966\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.00429844856 is over\n",
      "saliency.py[line:87] INFO step = 344, original_label = 388, adv_label=712 logit=3.94370269775\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.74943971634 is over\n",
      "saliency.py[line:87] INFO step = 345, original_label = 388, adv_label=712 logit=3.96785354614\n",
      "saliency.py[line:87] INFO step = 346, original_label = 388, adv_label=153 logit=3.97986030579\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.40252113342 is over\n",
      "saliency.py[line:87] INFO step = 347, original_label = 388, adv_label=153 logit=4.02624607086\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.13991594315 is over\n",
      "saliency.py[line:87] INFO step = 348, original_label = 388, adv_label=153 logit=4.025141716\n",
      "saliency.py[line:87] INFO step = 349, original_label = 388, adv_label=153 logit=4.07316350937\n",
      "saliency.py[line:87] INFO step = 350, original_label = 388, adv_label=153 logit=4.12312412262\n",
      "saliency.py[line:87] INFO step = 351, original_label = 388, adv_label=153 logit=4.12528991699\n",
      "saliency.py[line:87] INFO step = 352, original_label = 388, adv_label=153 logit=4.17666721344\n",
      "saliency.py[line:87] INFO step = 353, original_label = 388, adv_label=712 logit=4.22087669373\n",
      "saliency.py[line:87] INFO step = 354, original_label = 388, adv_label=712 logit=4.26988315582\n",
      "saliency.py[line:87] INFO step = 355, original_label = 388, adv_label=712 logit=4.31495189667\n",
      "saliency.py[line:87] INFO step = 356, original_label = 388, adv_label=712 logit=4.29947328568\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.66302537918 is over\n",
      "saliency.py[line:87] INFO step = 357, original_label = 388, adv_label=712 logit=4.30508613586\n",
      "saliency.py[line:87] INFO step = 358, original_label = 388, adv_label=153 logit=4.32482385635\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.59299755096 is over\n",
      "saliency.py[line:87] INFO step = 359, original_label = 388, adv_label=153 logit=4.3295841217\n",
      "saliency.py[line:87] INFO step = 360, original_label = 388, adv_label=153 logit=4.29362630844\n",
      "saliency.py[line:87] INFO step = 361, original_label = 388, adv_label=153 logit=4.25096321106\n",
      "saliency.py[line:87] INFO step = 362, original_label = 388, adv_label=712 logit=4.17452096939\n",
      "saliency.py[line:87] INFO step = 363, original_label = 388, adv_label=153 logit=4.13523292542\n",
      "saliency.py[line:87] INFO step = 364, original_label = 388, adv_label=153 logit=4.11270141602\n",
      "saliency.py[line:87] INFO step = 365, original_label = 388, adv_label=712 logit=4.18035840988\n",
      "saliency.py[line:87] INFO step = 366, original_label = 388, adv_label=153 logit=4.23304367065\n",
      "saliency.py[line:87] INFO step = 367, original_label = 388, adv_label=153 logit=4.19446849823\n",
      "saliency.py[line:87] INFO step = 368, original_label = 388, adv_label=153 logit=4.22011232376\n",
      "saliency.py[line:87] INFO step = 369, original_label = 388, adv_label=153 logit=4.21588182449\n",
      "saliency.py[line:87] INFO step = 370, original_label = 388, adv_label=971 logit=4.27271032333\n",
      "saliency.py[line:87] INFO step = 371, original_label = 388, adv_label=971 logit=4.36643791199\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.76806735992 is over\n",
      "saliency.py[line:87] INFO step = 372, original_label = 388, adv_label=971 logit=4.36821651459\n",
      "saliency.py[line:87] INFO step = 373, original_label = 388, adv_label=971 logit=4.48275470734\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.59299755096 is over\n",
      "saliency.py[line:87] INFO step = 374, original_label = 388, adv_label=971 logit=4.48810768127\n",
      "saliency.py[line:87] INFO step = 375, original_label = 388, adv_label=971 logit=4.51520204544\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.45826339722 is over\n",
      "saliency.py[line:87] INFO step = 376, original_label = 388, adv_label=712 logit=4.49793243408\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.42324924469 is over\n",
      "saliency.py[line:87] INFO step = 377, original_label = 388, adv_label=712 logit=4.49904346466\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.37072825432 is over\n",
      "saliency.py[line:87] INFO step = 378, original_label = 388, adv_label=712 logit=4.53831768036\n",
      "saliency.py[line:87] INFO step = 379, original_label = 388, adv_label=971 logit=4.57678604126\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.40574240685 is over\n",
      "saliency.py[line:87] INFO step = 380, original_label = 388, adv_label=971 logit=4.61561441422\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.44075632095 is over\n",
      "saliency.py[line:87] INFO step = 381, original_label = 388, adv_label=971 logit=4.65807580948\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.45826339722 is over\n",
      "saliency.py[line:87] INFO step = 382, original_label = 388, adv_label=971 logit=4.67410182953\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.52829146385 is over\n",
      "saliency.py[line:87] INFO step = 383, original_label = 388, adv_label=971 logit=4.73496246338\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.61582636833 is over\n",
      "saliency.py[line:87] INFO step = 384, original_label = 388, adv_label=971 logit=4.76888895035\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.31820726395 is over\n",
      "saliency.py[line:87] INFO step = 385, original_label = 388, adv_label=971 logit=4.78108453751\n",
      "saliency.py[line:87] INFO step = 386, original_label = 388, adv_label=971 logit=4.84344530106\n",
      "saliency.py[line:87] INFO step = 387, original_label = 388, adv_label=971 logit=4.91722583771\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "saliency.py[line:121] INFO adv_img[idx] 3.6683473587 is over\n",
      "saliency.py[line:87] INFO step = 388, original_label = 388, adv_label=971 logit=4.95058345795\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.35322141647 is over\n",
      "saliency.py[line:87] INFO step = 389, original_label = 388, adv_label=971 logit=4.99006175995\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.31820726395 is over\n",
      "saliency.py[line:87] INFO step = 390, original_label = 388, adv_label=971 logit=4.95807552338\n",
      "saliency.py[line:87] INFO step = 391, original_label = 388, adv_label=971 logit=4.99743700027\n",
      "saliency.py[line:87] INFO step = 392, original_label = 388, adv_label=971 logit=5.08588409424\n",
      "saliency.py[line:87] INFO step = 393, original_label = 388, adv_label=971 logit=5.14187002182\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.35322141647 is over\n",
      "saliency.py[line:87] INFO step = 394, original_label = 388, adv_label=971 logit=5.18511486053\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.3007004261 is over\n",
      "saliency.py[line:87] INFO step = 395, original_label = 388, adv_label=971 logit=5.2080450058\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.31820726395 is over\n",
      "saliency.py[line:87] INFO step = 396, original_label = 388, adv_label=971 logit=5.28921985626\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.29541921616 is over\n",
      "saliency.py[line:87] INFO step = 397, original_label = 388, adv_label=971 logit=5.34427833557\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.3296687603 is over\n",
      "saliency.py[line:87] INFO step = 398, original_label = 388, adv_label=971 logit=5.38067340851\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.13281059265 is over\n",
      "saliency.py[line:87] INFO step = 399, original_label = 388, adv_label=971 logit=5.39958286285\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.13281059265 is over\n",
      "saliency.py[line:87] INFO step = 400, original_label = 388, adv_label=466 logit=5.47161912918\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.28319334984 is over\n",
      "saliency.py[line:87] INFO step = 401, original_label = 388, adv_label=466 logit=5.49985361099\n",
      "saliency.py[line:87] INFO step = 402, original_label = 388, adv_label=466 logit=5.54650115967\n",
      "saliency.py[line:87] INFO step = 403, original_label = 388, adv_label=466 logit=5.60327339172\n",
      "saliency.py[line:87] INFO step = 404, original_label = 388, adv_label=466 logit=5.63913011551\n",
      "saliency.py[line:87] INFO step = 405, original_label = 388, adv_label=466 logit=5.66681194305\n",
      "saliency.py[line:87] INFO step = 406, original_label = 388, adv_label=466 logit=5.61129665375\n",
      "saliency.py[line:87] INFO step = 407, original_label = 388, adv_label=466 logit=5.64267158508\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.28319334984 is over\n",
      "saliency.py[line:87] INFO step = 408, original_label = 388, adv_label=466 logit=5.65921115875\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.31820726395 is over\n",
      "saliency.py[line:87] INFO step = 409, original_label = 388, adv_label=466 logit=5.68405294418\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.33571434021 is over\n",
      "saliency.py[line:87] INFO step = 410, original_label = 388, adv_label=466 logit=5.69760417938\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.24817943573 is over\n",
      "saliency.py[line:87] INFO step = 411, original_label = 388, adv_label=466 logit=5.68066453934\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.28319334984 is over\n",
      "saliency.py[line:87] INFO step = 412, original_label = 388, adv_label=466 logit=5.70840358734\n",
      "saliency.py[line:87] INFO step = 413, original_label = 388, adv_label=466 logit=5.69796466827\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.3007004261 is over\n",
      "saliency.py[line:87] INFO step = 414, original_label = 388, adv_label=466 logit=5.67942619324\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.29541921616 is over\n",
      "saliency.py[line:87] INFO step = 415, original_label = 388, adv_label=466 logit=5.71584701538\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.66512608528 is over\n",
      "saliency.py[line:87] INFO step = 416, original_label = 388, adv_label=466 logit=5.73673534393\n",
      "saliency.py[line:87] INFO step = 417, original_label = 388, adv_label=466 logit=5.77742385864\n",
      "saliency.py[line:87] INFO step = 418, original_label = 388, adv_label=466 logit=5.80075645447\n",
      "saliency.py[line:87] INFO step = 419, original_label = 388, adv_label=466 logit=5.83271884918\n",
      "saliency.py[line:87] INFO step = 420, original_label = 388, adv_label=466 logit=5.86984729767\n",
      "saliency.py[line:87] INFO step = 421, original_label = 388, adv_label=466 logit=5.91616487503\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.43753504753 is over\n",
      "saliency.py[line:87] INFO step = 422, original_label = 388, adv_label=466 logit=5.93209886551\n",
      "saliency.py[line:87] INFO step = 423, original_label = 388, adv_label=466 logit=5.9823551178\n",
      "saliency.py[line:87] INFO step = 424, original_label = 388, adv_label=466 logit=5.96366405487\n",
      "saliency.py[line:87] INFO step = 425, original_label = 388, adv_label=466 logit=5.99125957489\n",
      "saliency.py[line:87] INFO step = 426, original_label = 388, adv_label=466 logit=6.05811691284\n",
      "saliency.py[line:87] INFO step = 427, original_label = 388, adv_label=466 logit=6.0365896225\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.19033622742 is over\n",
      "saliency.py[line:87] INFO step = 428, original_label = 388, adv_label=466 logit=6.0599603653\n",
      "saliency.py[line:87] INFO step = 429, original_label = 388, adv_label=466 logit=6.06091499329\n",
      "saliency.py[line:87] INFO step = 430, original_label = 388, adv_label=466 logit=6.11168718338\n",
      "saliency.py[line:87] INFO step = 431, original_label = 388, adv_label=466 logit=6.08320140839\n",
      "saliency.py[line:87] INFO step = 432, original_label = 388, adv_label=466 logit=6.10262441635\n",
      "saliency.py[line:87] INFO step = 433, original_label = 388, adv_label=466 logit=6.05346727371\n",
      "saliency.py[line:87] INFO step = 434, original_label = 388, adv_label=466 logit=6.0834236145\n",
      "saliency.py[line:87] INFO step = 435, original_label = 388, adv_label=466 logit=6.13749027252\n",
      "saliency.py[line:87] INFO step = 436, original_label = 388, adv_label=466 logit=6.14394569397\n",
      "saliency.py[line:87] INFO step = 437, original_label = 388, adv_label=466 logit=6.14112758636\n",
      "saliency.py[line:87] INFO step = 438, original_label = 388, adv_label=466 logit=6.11414003372\n",
      "saliency.py[line:87] INFO step = 439, original_label = 388, adv_label=466 logit=6.11610221863\n",
      "saliency.py[line:87] INFO step = 440, original_label = 388, adv_label=466 logit=6.18813371658\n",
      "saliency.py[line:87] INFO step = 441, original_label = 388, adv_label=466 logit=6.2356967926\n",
      "saliency.py[line:87] INFO step = 442, original_label = 388, adv_label=466 logit=6.27254009247\n",
      "saliency.py[line:87] INFO step = 443, original_label = 388, adv_label=466 logit=6.32229185104\n",
      "saliency.py[line:87] INFO step = 444, original_label = 388, adv_label=466 logit=6.3385848999\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.53725481033 is over\n",
      "saliency.py[line:87] INFO step = 445, original_label = 388, adv_label=466 logit=6.34265041351\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.13991594315 is over\n",
      "saliency.py[line:87] INFO step = 446, original_label = 388, adv_label=466 logit=6.36406612396\n",
      "saliency.py[line:87] INFO step = 447, original_label = 388, adv_label=466 logit=6.34809303284\n",
      "saliency.py[line:87] INFO step = 448, original_label = 388, adv_label=466 logit=6.36848449707\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.13991594315 is over\n",
      "saliency.py[line:87] INFO step = 449, original_label = 388, adv_label=466 logit=6.36779212952\n",
      "saliency.py[line:87] INFO step = 450, original_label = 388, adv_label=466 logit=6.41209888458\n",
      "saliency.py[line:87] INFO step = 451, original_label = 388, adv_label=466 logit=6.45806217194\n",
      "saliency.py[line:87] INFO step = 452, original_label = 388, adv_label=466 logit=6.47991895676\n",
      "saliency.py[line:87] INFO step = 453, original_label = 388, adv_label=466 logit=6.5011343956\n",
      "saliency.py[line:87] INFO step = 454, original_label = 388, adv_label=466 logit=6.55108118057\n",
      "saliency.py[line:87] INFO step = 455, original_label = 388, adv_label=466 logit=6.56258773804\n",
      "saliency.py[line:87] INFO step = 456, original_label = 388, adv_label=466 logit=6.61361312866\n",
      "saliency.py[line:87] INFO step = 457, original_label = 388, adv_label=466 logit=6.59871912003\n",
      "saliency.py[line:87] INFO step = 458, original_label = 388, adv_label=971 logit=6.61068916321\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.79393792152 is over\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "saliency.py[line:87] INFO step = 459, original_label = 388, adv_label=466 logit=6.67675924301\n",
      "saliency.py[line:87] INFO step = 460, original_label = 388, adv_label=466 logit=6.72162437439\n",
      "saliency.py[line:121] INFO adv_img[idx] 4.52296924591 is over\n",
      "saliency.py[line:87] INFO step = 461, original_label = 388, adv_label=466 logit=6.73210525513\n",
      "saliency.py[line:87] INFO step = 462, original_label = 388, adv_label=466 logit=6.73072528839\n",
      "saliency.py[line:87] INFO step = 463, original_label = 388, adv_label=466 logit=6.74181175232\n",
      "saliency.py[line:87] INFO step = 464, original_label = 388, adv_label=466 logit=6.78701162338\n",
      "saliency.py[line:87] INFO step = 465, original_label = 388, adv_label=466 logit=6.77507352829\n",
      "saliency.py[line:87] INFO step = 466, original_label = 388, adv_label=466 logit=6.82346630096\n",
      "saliency.py[line:87] INFO step = 467, original_label = 388, adv_label=466 logit=6.81666374207\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.75968837738 is over\n",
      "saliency.py[line:87] INFO step = 468, original_label = 388, adv_label=466 logit=6.8571100235\n",
      "saliency.py[line:87] INFO step = 469, original_label = 388, adv_label=466 logit=6.89346599579\n",
      "saliency.py[line:87] INFO step = 470, original_label = 388, adv_label=466 logit=6.9537153244\n",
      "saliency.py[line:87] INFO step = 471, original_label = 388, adv_label=466 logit=6.95852947235\n",
      "saliency.py[line:87] INFO step = 472, original_label = 388, adv_label=466 logit=6.99216985703\n",
      "saliency.py[line:87] INFO step = 473, original_label = 388, adv_label=466 logit=7.02843761444\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.56941533089 is over\n",
      "saliency.py[line:87] INFO step = 474, original_label = 388, adv_label=466 logit=7.06342315674\n",
      "saliency.py[line:87] INFO step = 475, original_label = 388, adv_label=466 logit=7.08244752884\n",
      "saliency.py[line:87] INFO step = 476, original_label = 388, adv_label=466 logit=7.03554821014\n",
      "saliency.py[line:87] INFO step = 477, original_label = 388, adv_label=466 logit=7.0378742218\n",
      "saliency.py[line:87] INFO step = 478, original_label = 388, adv_label=466 logit=7.03931045532\n",
      "saliency.py[line:121] INFO adv_img[idx] 3.30710244179 is over\n",
      "saliency.py[line:87] INFO step = 479, original_label = 388, adv_label=466 logit=7.07224369049\n",
      "saliency.py[line:87] INFO step = 480, original_label = 388, adv_label=466 logit=7.11719608307\n",
      "saliency.py[line:87] INFO step = 481, original_label = 388, adv_label=466 logit=7.10673618317\n",
      "saliency.py[line:87] INFO step = 482, original_label = 388, adv_label=466 logit=7.12967920303\n",
      "saliency.py[line:87] INFO step = 483, original_label = 388, adv_label=466 logit=7.11696147919\n",
      "saliency.py[line:87] INFO step = 484, original_label = 388, adv_label=466 logit=7.10145664215\n",
      "saliency.py[line:87] INFO step = 485, original_label = 388, adv_label=466 logit=7.18832063675\n",
      "saliency.py[line:87] INFO step = 486, original_label = 388, adv_label=466 logit=7.23667049408\n",
      "saliency.py[line:87] INFO step = 487, original_label = 388, adv_label=466 logit=7.26935577393\n",
      "saliency.py[line:87] INFO step = 488, original_label = 388, adv_label=466 logit=7.29946660995\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "attack success, adversarial_label=538\n",
      "jsma attack done\n"
     ]
    }
   ],
   "source": [
    "# Define what device we are using\n",
    "logging.info(\"CUDA Available: {}\".format(torch.cuda.is_available()))\n",
    "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
    "\n",
    "#cv2默认读取格式为bgr bgr -> rgb   \n",
    "orig = cv2.imread(image_path)[..., ::-1]\n",
    "#转换成224*224\n",
    "orig = cv2.resize(orig, (224, 224))\n",
    "adv=None\n",
    "img = orig.copy().astype(np.float32)\n",
    "\n",
    "#图像数据标准化\n",
    "mean = [0.485, 0.456, 0.406]\n",
    "std = [0.229, 0.224, 0.225]\n",
    "img /= 255.0\n",
    "img = (img - mean) / std\n",
    "\n",
    "#pytorch中图像格式为CHW  \n",
    "#[224,224,3]->[3,224,224]\n",
    "img = img.transpose(2, 0, 1)\n",
    "\n",
    "img = Variable(torch.from_numpy(img).to(device).float().unsqueeze(0)).cpu().numpy()\n",
    "\n",
    "\n",
    "# Initialize the network\n",
    "#Alexnet\n",
    "model = models.alexnet(pretrained=True).to(device).eval()\n",
    "\n",
    "#print(model)\n",
    "\n",
    "#设置为不保存梯度值 自然也无法修改\n",
    "for param in model.parameters():\n",
    "    param.requires_grad = False\n",
    "\n",
    "# advbox demo\n",
    "m = PytorchModel(\n",
    "    model, None,(-3, 3),\n",
    "    channel_axis=1)\n",
    "\n",
    "#实例化JSMA max_iter为最大迭代次数  theta为扰动系数 max_perturbations_per_pixel为单像素最大修改次数\n",
    "attack = JSMA(m)\n",
    "attack_config = {\n",
    "        \"max_iter\": 2000,\n",
    "        \"theta\": 0.3,\n",
    "        \"max_perturbations_per_pixel\": 7,\n",
    "        \"fast\":True,\n",
    "        \"two_pix\":False\n",
    "}\n",
    "\n",
    "\n",
    "inputs=img\n",
    "labels = None\n",
    "\n",
    "print(inputs.shape)\n",
    "\n",
    "adversary = Adversary(inputs, labels)\n",
    "\n",
    "#定向攻击\n",
    "tlabel = 538\n",
    "adversary.set_target(is_targeted_attack=True, target_label=tlabel)\n",
    "\n",
    "\n",
    "adversary = attack(adversary, **attack_config)\n",
    "\n",
    "if adversary.is_successful():\n",
    "    print(\n",
    "        'attack success, adversarial_label=%d'\n",
    "        % (adversary.adversarial_label))\n",
    "\n",
    "    adv=adversary.adversarial_example[0]\n",
    "\n",
    "else:\n",
    "    print('attack failed')\n",
    "\n",
    "\n",
    "print(\"jsma attack done\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#格式转换\n",
    "adv = adv.transpose(1, 2, 0)\n",
    "adv = (adv * std) + mean\n",
    "adv = adv * 256.0\n",
    "adv = np.clip(adv, 0, 255).astype(np.uint8)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "l0=406 l2=2182.05522387\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#显示原始图片  抵抗样本 以及两张图之间的差异  其中灰色代表没有差异的像素点\n",
    "show_images_diff(orig,adversary.original_label,adv,adversary.adversarial_label)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "相对FGSM、DeepFool，JSMA修改的像素个数少，即l0非常小"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "advbox",
   "language": "python",
   "name": "advbox"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.15"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
